NIUHE

日々私たちが过ごしている日常というのは、実は奇迹の连続なのかもしれんな

MySQL 笔记

登陆

1
2
$ mysql [-h hostname] -u username -p
Enter Password:

新建数据库

1
mysql> create database dbname;

创建用户和分配权限

1
2
3
4
5
GRANT privileges [columes] 
ON item
TO user_name [IDENTIFIED BY 'password']
[REQUIRE ssl_options]
[WITH [GRANT OPTION | limit_options] ]
创建用户
1
CREATE USER 'username'@'host' IDENTIFIED BY 'password';
授权
1
GRANT privileges ON databasename.tablename TO 'username'@'host'

说明: privileges – 用户的操作权限,如SELECT , INSERT , UPDATE 等.如果要授予所 的权限则使用ALL.;databasename – 数据库名,tablename-表名,如果要授予该用户对所有数据库和表的相应操作权限则可用* 表示, 如:

1
GRANT SELECT, INSERT ON test.user TO 'pig'@'%';

使用数据库

1
mysql> use dbname;

创建数据库表

1
2
3
4
mysql> CREATE DATABASE dbname;
mysql> CREATE TABLE tablename (columns);
// 丛文件中载入
mysql> -h host -u username -D dbname -p < bookorama.sql;

举例:

1
2
3
4
5
6
mysql> CREATE TABLE books(
isbn char(13) NOT NULL PRIMARY KEY,
author char(50),
title char(100),
price float(4, 2)
);

查看数据库

1
2
3
mysql> show tables;
mysql> show database;
mysql> describe tables; // 查看某个表的详细信息

索引

索引的创建可以在CREATE TABLE语句中进行,也可以单独用CREATE INDEXALTER TABLE来给表增加索引。删除索引可以利用ALTER TABLEDROP INDEX语句来实现。

1
CREATE [UNIQUE | FULLTEXT] INDEX index_name ON table_name (index_column_name [(length)] [ASC|DESC], ...)

使用ALTER TABLE语句创建索引

语法如下

1
2
3
alter table table_name add index index_name (column_list) ;
alter table table_name add unique (column_list) ;
alter table table_name add primary key (column_list) ;

其中包括 * 普通索引、UNIQUE索引和PRIMARY KEY索引3种创建索引的格式 * table_name是要增加索引的表名 * column_list指出对哪些列进行索引,多列时各列之间用逗号分隔。 * 索引名index_name可选,缺省时,MySQL将根据第一个索引列赋一个名称。 * ALTER TABLE允许在单个语句中更改多个表,因此可以同时创建多个索引。

创建索引的示例如下:

1
2
mysql> alter table table_test add index index_test1(name) ;
Query OK, 2 rows affected (0.08 sec)

使用CREATE INDEX语句对表增加索引

能够增加普通索引和UNIQUE索引两种。其格式如下:

1
2
mysql> create index index_name on table_name (column_list) ;
create unique index index_name on table_name (column_list) ;

创建索引的示例如下:

1
2
mysql> create index index_test2 on table_test(age);
Query OK, 2 rows affected (0.08 sec)

说明:table_nameindex_namecolumn_list具有与ALTER TABLE语句中相同的含义,索引名不可选。另外,不能用CREATE INDEX语句创建PRIMARY KEY索引。

删除索引

删除索引可以使用ALTER TABLEDROP INDEX语句来实现。

DROP INDEX可以在ALTER TABLE内部作为一条语句处理,其格式如下:

1
2
3
drop index index_name on table_name ;
alter table table_name drop index index_name ;
alter table table_name drop primary key ;

其中,在前面的两条语句中,都删除了table_name中的索引index_name。而在最后一条语句中,只在删除PRIMARY KEY索引中使用,因为一个表只可能有一个PRIMARY KEY索引,因此不需要指定索引名。如果没有创建PRIMARY KEY索引,但表具有一个或多个UNIQUE索引,则MySQL将删除第一个UNIQUE索引。

如果从表中删除某列,则索引会受影响。对于多列组合的索引,如果删除其中的某列,则该列也会从索引中删除。如果删除组成索引的所有列,则整个索引将被删除。

删除索引的操作,如下面的代码:

1
2
mysql> drop index name on table_test ;
Query OK, 2 rows affected (0.08 sec)

数据类型

整数类型

类型 取值范围 存储空间 描述
TINYINT[(M)] -127128或0255 1 非常小的整数
BIT TINYINT的同义词
BOOL TINYINT的同义词
SMALLINT[(M)] -3276832767或065535 2 小型整数
MEDIUMINT[(M)] -83886088883607或016777215 3 中型整数
INT[(M)] \(-2^{31}\)\(2^{31}-1\)或0\(2^{32}-1\) 4 一般整数
INTEGER[(M)] INT的同义词
BIGINT[(M)] \(-2^{63}\)\(2^{63}-1\)或0\(2^{64}-1\) 8 大型整数

浮点类型

类型 取值范围 存储空间 描述
FLOAT(精度) 取决于精度 可变 可用于指定单精度和双精度浮点数
FLOAT[(M, D)] +- 1.17549E-38 4 单精度浮点数,等同于FLOAT(4)
DOUBLE[(M), D] +- 3.40282E+308 8 双精度浮点数,等同于FLOAT(8)
DOUBLE DOUBLE[(M, D)]的同义词
PRECISION[(M, D)] 同上
REAL[(M, D)] 同上
DECIMAL[(M [,D])] 可变 M + 2 浮点数,以char存储。范围取决于M
NUMERIC[(M, D)] 同上 DECIMAL的同义词
DEC[(M, D)] 同上 DECIMAL的同义词
FIXED[(M, D)] 同上 DECIMAL的同义词

日期和时间类型

类型 取值范围 描述
DATE 1000-01-01 ~ 9999-12-31 一个日期,以YYYY-MM-DD格式显示
TIME -838:59:59 ~ 838:59:59 一个时间,以HH:MM:SS形式显示
DATETIME 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 日期和时间
TIMESTAMP[(M)] 1970-01-01 00:00:00 ~ 2037年的某个时间 时间标签,在处理报告中有意义。
YEAR[(2/4)] 7069(19702069) 年份。可以指定2位数字或4位数字的格式。

字符串类型

常规字符串类型
类型 取值范围 描述
CHAR(M) 0~255个字符 固定长度为M的字符串,M的取值为0~255
CHAR CHAR(1)的同义词
VARCHAR(M) 1~255个字符 可变长度
TEXT和BLOB类型
类型 最大长度(字符数) 描述
TINYBLOB 255 小二进制大对象(BLOB)字段
TINYTEXT 255 小TEXT字段
BLOB 65535 常规BLOB字段
TEXT 65535 常规TEXT字段
MEDIUMBLOB \(2^{24}-1\) 中型BLOB字段
MEDIUMTEXT \(2^{24}-1\) 中型TEXT字段
LONGBLOB \(2^{32}-1\) 长BLOB字段
LONGTEXT \(2^{32}-1\) 长TEXT字段
SET和ENUM类型
类型 集合中的最大值 描述
ENUM('value1', 'value2', ...) 65535 该类型的列只可以容纳所列值之一或者为NULL
SET('value1', 'value2', ...) 64 该类型的列可以容纳一组值或者为NULL

插入数据

1
2
INSERT [INTO] table_name [(column1, column2, ...)] 
VALUES(value1, value2, ...);

查询数据

1
2
3
4
5
6
7
8
9
10
SELECT [options] items
[INTO file_details]
FROM `tables_name`
[ WHERE conditions ]
[ GROUP BY group_type ]
[ HAVING where_definition ]
[ ORDER BY order_type ]
[ LIMIT limit_criteria ]
[ PROCEDURE proc_name(arguments)]
[ lock_options ];

此处略过1000字

更新数据

1
2
3
4
5
UPDATE [LOW_PRIORITY] [IGNORE] tablename
SET column1 = expression1, ...
[ WHERE condition ]
[ ORDER BY order_criteria ]
[ LIMIT number ]

Powered by Hexo and Theme by Hacker
© 2019 NIUHE